#ifndef IPC_VALUE_H
#define IPC_VALUE_H

#include "internal/cef_string.h"
#include "capi/cef_values_capi.h"
#include "capi/cef_v8_capi.h"

#include "tools/log_util.h"
#include "logger.h"

// ipc 数据值封装
typedef enum {
    IPC_TYPE_BOOL,
    IPC_TYPE_INT,
    IPC_TYPE_DOUBLE,
    IPC_TYPE_STRING
} IPC_Value_Type;

typedef struct{
    IPC_Value_Type type;
    union {
        int Bool;
        int Int;
        double Double;
        char* String;
    } value;
} IPC_Value;


IPC_Value* ipc_value_create_by_cef_value(cef_value_t *value);

/**
 * ipc_value 为null时返回空对象，为 js null
 */
cef_value_t* ipc_value_to_cef_value(IPC_Value* ipc_value);

void ipc_value_set_string(IPC_Value* ipc_value, char* str);
void ipc_value_free(IPC_Value* ipc_value);

IPC_Value* _create_ipc_value_int(int value);
IPC_Value* _create_ipc_value_double(double value);
IPC_Value* _create_ipc_value_bool(int value);
IPC_Value* _create_ipc_value_string(char* value);

int _ipc_value_get_int(IPC_Value* ipc_value);
double _ipc_value_get_double(IPC_Value* ipc_value);
char* _ipc_value_get_string(IPC_Value* ipc_value);
int _ipc_value_get_bool(IPC_Value* ipc_value);

IPC_Value_Type _ipc_value_get_type(IPC_Value* ipc_value);



#endif